#ifndef TOTAL_H_
#define TOTAL_H_

#include "../../SAMA_Function.h"

typedef enum {
	TOTAL_SUM,			//< 累加和
	TOTAL_AVG,			//< 取平均
	TOTAL_MAX,			//< 最大值
	TOTAL_MIN,			//< 最小值
	TOTAL_T_SUM,		//< 梯形累计和
}TOTAL_WORK_t;

/*模块可调参数结构体*/
typedef struct {
	float Init_Value;	//< 积算初值
	float K;			//< 转换系数
	TOTAL_WORK_t mode;	//< 积算方式
}TOTAL_Par_t;


/*模块运算中间参数结构体定义*/
typedef struct {
	bool Sd_Last;		//< 上一时刻置位信号
	bool Start_Flg;		//< 开始积算的标志
	float AI_Last;		//< 上一时刻输入值
	float Sum_Value;	//< 输入值累加
	int Sum_Count;		//< 输入数量累加
	float LastOut_Value;//< 上一时刻输出值
	float LastCalu_Value;//< 上次计算值
}TOTAL_Sta_t;


/*模块参数结构体定义*/
struct TOTAL_T
{
	Model_Base_t Base;		//< 模块基本参数结构体
	TOTAL_Par_t Par;		//< 模块可调参数结构体
	TOTAL_Sta_t Sta;		//< 模块运算中间参数结构体
};


extern TOTAL_T* TOTAL_t;

/*函数*/
bool CALCU_SAMA(TOTAL)(Model_Base_t* arg, float dt, bool* DI, bool* DO, float* AI, float* AO);	//< SAMA运算函数
int BC_PARA(TOTAL)(Model_Base_t* arg, void** Data);											//< 广播SAMA参数变量函数（无参数需要广播的模块直接将BCPara函数设置为NULL即可）
int BAK_STA(TOTAL)(Model_Base_t* arg, void** Data);											//< 备份SAMA运算中间参数
int ANA_STA(TOTAL)(Model_Base_t* arg, void** Data);											//< 解析备份的SAMA运算中间参数
int CHANGE_PAR(TOTAL)(Model_Base_t* arg, void** Data);											//< 在线修改模块参数函数
void INIT_STAPAR(TOTAL)(Model_Base_t* arg);													//< 初始化模块运算中间参数


#endif
